home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The PC-SIG Library 9
/
The PC-SIG Library on CD ROM - Ninth Edition.iso
/
401_500
/
DISK0435
/
DISK0435.ZIP
/
TRIGFUNC.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-05-17
|
3KB
|
105 lines
{ ******************************************************************** }
{ * TrigFun.bas %INCLUDE FILE * }
{ * Trigonometric functions For CBASIC-80 version 2.08 * }
{ * Copyright (c) 1982, Robert Lurie * }
{ ******************************************************************** }
{ ******************************* constants ************************** }
CONST Pi = 3.14159265358979;
Sqrt2 = 1.41421356237310;
LocT0 = 0.103851714551977E4;
LocT1 = -0.178056467143863E2;
LocT2 = 0.262478645943200E-1;
LocT3 = 0.264456219512224E4;
LocT4 = -0.181283283485401E3;
LocT5 = 0.216062307897243E3;
LocT6 = 0.322662070013251E3;
LocT7 = 0.132702398163977E3;
LocT8 = 0.128883830341573E2;
LocT9 = 0.216062307897243E3;
LocT10 = 0.394682839312283E3;
LocT11 = 0.221050883028418E3;
LocT12 = 0.385014865083512E2;
{ ****************************** functions *************************** }
FUNCTION TanHalf(x:REAL):REAL;
VAR O, OSquare : REAL;
Loop : INTEGER;
BEGIN O := ABS(x) / (pi + pi);
O := 8.0 * (O - INT(O));
Loop := 0;
WHILE (O > 1.0) DO BEGIN
O := 0.5 * O;
Loop := Loop + 1
END;
OSquare := Sqr(O);
O := O*((LocT2*OSquare + LocT1)*OSquare + LocT0)
/ ((OSquare + LocT4)*OSquare + LocT3);
WHILE Loop > 0 DO BEGIN
O := (O + O) / (1.0 - Sqr(O));
Loop := Loop - 1
END;
IF x < 0.0 THEN TanHalf := -O ELSE TanHalf := O
END;
FUNCTION Sine(x:REAL):REAL;
BEGIN x := TanHalf(x);
Sine := (x + x) / (1.0 + Sqr(x))
END;
FUNCTION Cosine(x:REAL):REAL;
BEGIN x := TanHalf(x);
x := Sqr(x);
Cosine := (1.0 - x) / (1.0 + x)
END;
FUNCTION Tan(x:REAL):REAL;
BEGIN x := TanHalf(x);
Tan := (x + x) / (1.0 - Sqr(x))
END;
FUNCTION ATan(x:REAL):REAL;
VAR O, OSquare : REAL;
Loop : INTEGER;
BEGIN O := ABS(x);
Loop := 0;
IF (O > Sqrt2 + 1.0) THEN BEGIN
Loop := 2; O := -1.0 / O
END;
IF (O > Sqrt2 - 1.0) THEN BEGIN
Loop := 1; O := 1.0 - 2.0 / (1.0 + O)
END;
OSquare := Sqr(O);
O := O * (((LocT8 * OSquare + LocT7)
* OSquare + LocT6) * OSquare + LocT5);
OSquare := (((OSquare + LocT12) * OSquare + LocT11)
* OSquare + LocT10) * OSquare + LocT9;
O := O / OSquare;
IF Loop = 1 THEN O := O + 0.25 * pi;
IF Loop = 2 THEN O := O + 0.50 * pi;
IF x < 0.0 THEN ATan := -O ELSE ATan := O
END;
FUNCTION ASin(x:REAL):REAL;
VAR O, OSquare : REAL;
BEGIN O := ABS(x);
IF O > 1.0 THEN WRITE('Illegal arguement');
IF O = 1.0 THEN BEGIN
IF x < 0.0 THEN ASin := -0.5 * pi
ELSE ASin := 0.5 * pi
END
ELSE ASin := ATan(x / SQR(1.0 - Sqr(x)))
END;
FUNCTION ACos(x:REAL):REAL;
BEGIN ACos := (0.5 * pi) - ASin(x)
END;
{ ************************** end of TrigFunc.bas ********************* }